home *** CD-ROM | disk | FTP | other *** search
/ Suzy B Software 2 / Suzy B Software CD-ROM 2 (1994).iso / new_file / programm / a56 / a56.lzh / examples / sixcomb.lis < prev    next >
Encoding:
File List  |  1994-09-02  |  26.1 KB  |  735 lines

  1.               ;***************************************************************
  2.               ; 
  3.               ; A stereo reverb for the DSP56001 signal processor.  Based on,
  4.               ; 
  5.               ;       Moorer, James A. "About This Reverberation Business."
  6.               ;       Computer Music Journal Vol 3, No. 2 (1979), pp. 13-28.
  7.               ;
  8.               ;   reprinted in,
  9.               ;
  10.               ;       Roads, Curtis, and Strawn, John, ed., _Foundations
  11.               ;       of Computer Music_, pp. 605-639, MIT Press, 1985.
  12.               ;       ISBN 0-262-68051-3 (paper)
  13.               ;       ISBN 0-262-181142 (hard)
  14.               ;
  15.               ; Each comb filter uses a low-pass filter in the feedback path.
  16.               ; The combs and all-pass filter delay lines use a prime-number
  17.               ; of stages to improve diffusion.
  18.               ;
  19.               ; The output all-pass stage is replicated for left/right
  20.               ; decorrelation.  Each side uses slightly different gains
  21.               ; and delay lengths.  This works a lot better than just inverting
  22.               ; one side and adding in the input.
  23.               ;
  24.               ; I left out the early-reflection FIR filter because I needed the cycles
  25.               ; for other effects.
  26.               ;
  27.               ; Quinn Jensen (jensenq@qcj.icon.com)
  28.               ;
  29.               ;***************************************************************
  30. P:0000 0040           psect   vectors         p:$0000:$0040
  31. P:0040 0200           psect   hf_code         p:$0040:$0200
  32. X:0000 0040           psect   hf_datax        x:$0000:$0040
  33. X:0040 0100           psect   hf_datax1       x:$0040:$0100
  34. Y:0000 0040           psect   hf_datay        y:$0000:$0040
  35. Y:0040 0100           psect   hf_datay1       y:$0040:$0100
  36. X:0400 1000           psect   midi_data       x:$0400:$1000
  37. X:1000 F000           psect   lo_data         x:$1000:$F000
  38. P:F000 FE00           psect   lo_code         p:$F000:$FE00
  39. P:FE00 FFFF           psect   loader          p:$FE00:$FFFF
  40. X:FFC0 FFFF           psect   iox             x:$FFC0:$FFFF
  41. Y:FFC0 FFFF           psect   ioy             y:$FFC0:$FFFF
  42.               ;
  43.               ; some oft-used constants
  44.               ;
  45. X:0000                psect   hf_datax
  46. X:0000 00FFFF ffff    dc      $FFFF           ;used a lot for modulus
  47. 7FFFFF        ONE     equ     $7FFFFF         ;"one"
  48. X:0001 7FFFFF one     dc      ONE             ;"one"
  49.               ;
  50.               ; L/R inputs and outputs
  51.               ;
  52. X:0002 000000 in_l    dc      0.0      
  53. X:0003 000000 in_r    dc      0.0      
  54. X:0004 000000 out_l   dc      0.0      
  55. X:0005 000000 out_r   dc      0.0      
  56.               ;
  57.               ; recompute comb gains g1 and g2
  58.               ;
  59. X:0006        recalc_comb_gains
  60. X:0006 609F00         move            x:<constsp,r0
  61. X:0007 058020         movec           x:<ffff,m0
  62. X:0008 57F000         move            x:lowpass_cutoff_start,b
  63. X:0009 000400
  64. X:000A 47F000         move            x:lowpass_cutoff_slope,y1
  65. X:000B 000401
  66. X:000C 45F000         move            x:comb_g,x1
  67. X:000D 000402
  68. X:000E 244000         move            #0.5,x0
  69.               
  70. X:000F 060680         do      #6,recalc_loop
  71. X:0010 000017
  72. X:0011 205813           clr   a       (r0)+           ;skip over the modulus const
  73. X:0012 21E640           add   x0,a    b,y0
  74. X:0013 2000D2           mac   x0,y0,a                 ;g1 = .5 * b + .5
  75. X:0014 21C613           clr   a       a,y0            ;y0 = g1
  76. X:0015 4E5860           add   x1,a    y0,y:(r0)+      ;store g1 in table
  77. X:0016 2000E7           macr  -x1,y0,a                ;g2 = g(1-g1) = g - g*g1 with limiting
  78. X:0017 5E5878           add   y1,b    a,y:(r0)+       ;update b, store g2 in table
  79. X:0018        recalc_loop
  80. X:0018 00000C         rts
  81.               
  82. X:0400                psect   midi_data
  83.               ;
  84.               ; default values for midi-derived parameters
  85.               ;
  86. X:0400        lowpass_cutoff_start
  87. X:0400 CE0000         dc      -0.3906250      ; ctl value of 39
  88. X:0401        lowpass_cutoff_slope
  89. X:0401 060000         dc      0.0468750       ; ctl value of 67
  90. X:0402        comb_g
  91. X:0402 6A9106         dc      0.8325507974    ; ctl value of 57
  92.               ;
  93.               ; preset comb-length arrays
  94.               ;
  95.               
  96.               
  97.               
  98.               ; comb lenths 383,433,467,523,557,601
  99. X:0403        comblen_1
  100. X:0403 00017E         dc      383-1
  101. X:0404 0001B0         dc      433-1
  102. X:0405 0001D2         dc      467-1
  103. X:0406 00020A         dc      523-1
  104. X:0407 00022C         dc      557-1
  105. X:0408 000258         dc      601-1
  106.               
  107.               
  108.               ; comb lenths 509,577,631,701,743,797
  109. X:0409        comblen_2
  110. X:0409 0001FC         dc      509-1
  111. X:040A 000240         dc      577-1
  112. X:040B 000276         dc      631-1
  113. X:040C 0002BC         dc      701-1
  114. X:040D 0002E6         dc      743-1
  115. X:040E 00031C         dc      797-1
  116.               
  117.               
  118.               ; comb lenths 683,769,839,937,991,1069
  119. X:040F        comblen_3
  120. X:040F 0002AA         dc      683-1
  121. X:0410 000300         dc      769-1
  122. X:0411 000346         dc      839-1
  123. X:0412 0003A8         dc      937-1
  124. X:0413 0003DE         dc      991-1
  125. X:0414 00042C         dc      1069-1
  126.               
  127.               
  128.               ; comb lenths 919,1021,1117,1249,1319,1427
  129. X:0415        comblen_4
  130. X:0415 000396         dc      919-1
  131. X:0416 0003FC         dc      1021-1
  132. X:0417 00045C         dc      1117-1
  133. X:0418 0004E0         dc      1249-1
  134. X:0419 000526         dc      1319-1
  135. X:041A 000592         dc      1427-1
  136.               
  137.               
  138.               ; comb lenths 1223,1367,1489,1657,1759,1901
  139. X:041B        comblen_5
  140. X:041B 0004C6         dc      1223-1
  141. X:041C 000556         dc      1367-1
  142. X:041D 0005D0         dc      1489-1
  143. X:041E 000678         dc      1657-1
  144. X:041F 0006DE         dc      1759-1
  145. X:0420 00076C         dc      1901-1
  146.               
  147.               
  148.               ; comb lenths 1627,1823,1987,2213,2341,2539
  149. X:0421        comblen_6
  150. X:0421 00065A         dc      1627-1
  151. X:0422 00071E         dc      1823-1
  152. X:0423 0007C2         dc      1987-1
  153. X:0424 0008A4         dc      2213-1
  154. X:0425 000924         dc      2341-1
  155. X:0426 0009EA         dc      2539-1
  156.               
  157.               
  158.               ;;;;;;;;;;;;;;;;;;;;;;;
  159.               ; reverb filters
  160.               ;;;;;;;;;;;;;;;;;;;;;;;
  161.               
  162.               ;  Reverb filter lengths and coefficients     
  163.               ;  6 comb reverb with prime delay lines
  164.               ;  Sun Oct 24 13:53:51 1993
  165.               ;  
  166.               ;                          Sample rate        32.5520830 kHz      
  167.               ;                          g                   0.8400000
  168.               ;  
  169.               ;                    status      STABLE       
  170.               ;         delay      near prime lengths actual
  171.               ;  stage   (ms)   1  high   low  best  delay        g1        g2
  172.               ;  ---------------------------------------------------------------
  173.               ;  Comb 1  50.0  1628  1637  1627  1627 49.981 0.3064583 0.5825750
  174.               ;  Comb 2  56.0  1823  1823  1823  1823 56.003 0.3264583 0.5657750
  175.               ;  Comb 3  61.0  1986  1987  1979  1987 61.041 0.3464583 0.5489750
  176.               ;  Comb 4  68.0  2214  2221  2213  2213 67.983 0.3594792 0.5380375
  177.               ;  Comb 5  72.0  2344  2347  2341  2341 71.916 0.3694792 0.5296375
  178.               ;  Comb 6  78.0  2539  2539  2539  2539 77.998 0.4243750 0.4835250
  179.               ;  All      6.0   195   197   193   193  5.929 0.7000000
  180.               
  181.               ; COMB(name, length, modulus, g1, g2)
  182.               
  183.               
  184.               
  185.               
  186.               ; storage for "c1" length=1627 modulus=2048 g1=0.3046875 g2=0.5812382
  187.               
  188. X:1000                psect   lo_data
  189. X:1000                align   2048
  190. X:1000        c1d
  191. 00065A        c1m     equ     1627-1
  192. X:165A                org     x:c1d+c1m
  193. X:0019                psect   hf_datax
  194.   0.304688    c1g1    equ     0.3046875
  195.   0.581238    c1g2    equ     0.5812382
  196.               
  197.               
  198.               ; storage for "a1" length=193 modulus=256 g1=0.7000000 g2=0.0000000
  199.               
  200. X:165A                psect   lo_data
  201. X:1700                align   256
  202. X:1700        a1d
  203. 0000C0        a1m     equ     193-1
  204. X:17C0                org     x:a1d+a1m
  205. X:0019                psect   hf_datax
  206.        0.7    a1g1    equ     0.7000000
  207.          0    a1g2    equ     0.0000000
  208.               
  209.               
  210.               ; storage for "c2" length=1823 modulus=2048 g1=0.3281250 g2=0.5616459
  211.               
  212. X:17C0                psect   lo_data
  213. X:1800                align   2048
  214. X:1800        c2d
  215. 00071E        c2m     equ     1823-1
  216. X:1F1E                org     x:c2d+c2m
  217. X:0019                psect   hf_datax
  218.   0.328125    c2g1    equ     0.3281250
  219.   0.561646    c2g2    equ     0.5616459
  220.               
  221.               
  222.               ; storage for "c3" length=1987 modulus=2048 g1=0.3515625 g2=0.5420536
  223.               
  224. X:1F1E                psect   lo_data
  225. X:2000                align   2048
  226. X:2000        c3d
  227. 0007C2        c3m     equ     1987-1
  228. X:27C2                org     x:c3d+c3m
  229. X:0019                psect   hf_datax
  230.   0.351563    c3g1    equ     0.3515625
  231.   0.542054    c3g2    equ     0.5420536
  232.               
  233.               
  234.               ; storage for "c4" length=2213 modulus=4096 g1=0.3750000 g2=0.5224613
  235.               
  236. X:27C2                psect   lo_data
  237. X:3000                align   4096
  238. X:3000        c4d
  239. 0008A4        c4m     equ     2213-1
  240. X:38A4                org     x:c4d+c4m
  241. X:0019                psect   hf_datax
  242.      0.375    c4g1    equ     0.3750000
  243.   0.522461    c4g2    equ     0.5224613
  244.               
  245.               
  246.               ; storage for "a2" length=207 modulus=256 g1=0.7500000 g2=0.0000000
  247.               
  248. X:38A4                psect   lo_data
  249. X:3900                align   256
  250. X:3900        a2d
  251. 0000CE        a2m     equ     207-1
  252. X:39CE                org     x:a2d+a2m
  253. X:0019                psect   hf_datax
  254.       0.75    a2g1    equ     0.7500000
  255.          0    a2g2    equ     0.0000000
  256.               
  257.               
  258.               ; storage for "c5" length=2341 modulus=4096 g1=0.3984375 g2=0.5028690
  259.               
  260. X:39CE                psect   lo_data
  261. X:4000                align   4096
  262. X:4000        c5d
  263. 000924        c5m     equ     2341-1
  264. X:4924                org     x:c5d+c5m
  265. X:0019                psect   hf_datax
  266.   0.398438    c5g1    equ     0.3984375
  267.   0.502869    c5g2    equ     0.5028690
  268.               
  269.               
  270.               ; storage for "c6" length=2539 modulus=4096 g1=0.4218750 g2=0.4832767
  271.               
  272. X:4924                psect   lo_data
  273. X:5000                align   4096
  274. X:5000        c6d
  275. 0009EA        c6m     equ     2539-1
  276. X:59EA                org     x:c6d+c6m
  277. X:0019                psect   hf_datax
  278.   0.421875    c6g1    equ     0.4218750
  279.   0.483277    c6g2    equ     0.4832767
  280.               
  281.               
  282. X:0019                psect   hf_datax
  283. X:0019 001700 a1r     dc      a1d
  284. X:001A 0000C0 a1md    dc      a1m
  285. X:001B 59999A a1g1d   dc      a1g1
  286. X:001C 003900 a2r     dc      a2d
  287. X:001D 0000CE a2md    dc      a2m
  288. X:001E 600000 a2g1d   dc      a2g1
  289. Y:0000                psect   hf_datay
  290. Y:0000        curaddrp
  291. Y:0000 000040         dc      curaddr
  292. X:001F                psect   hf_datax
  293. X:001F 000040 constsp dc      consts
  294. X:0020        lowstatep
  295. X:0020 000046         dc      lowstate
  296.               
  297. X:0040                psect   hf_datax1
  298. X:0040        curaddr
  299. X:0040 001000         dc      c1d
  300. X:0041 001800         dc      c2d
  301. X:0042 002000         dc      c3d
  302. X:0043 003000         dc      c4d
  303. X:0044 004000         dc      c5d
  304. X:0045 005000         dc      c6d
  305.               
  306. Y:0040                psect   hf_datay1
  307. Y:0040        consts
  308. Y:0040 00065A         dc      c1m
  309. Y:0041 270000         dc      c1g1
  310. Y:0042 4A6603         dc      c1g2
  311. Y:0043 00071E         dc      c2m
  312. Y:0044 2A0000         dc      c2g1
  313. Y:0045 47E403         dc      c2g2
  314. Y:0046 0007C2         dc      c3m
  315. Y:0047 2D0000         dc      c3g1
  316. Y:0048 456203         dc      c3g2
  317. Y:0049 0008A4         dc      c4m
  318. Y:004A 300000         dc      c4g1
  319. Y:004B 42E003         dc      c4g2
  320. Y:004C 000924         dc      c5m
  321. Y:004D 330000         dc      c5g1
  322. Y:004E 405E03         dc      c5g2
  323. Y:004F 0009EA         dc      c6m
  324. Y:0050 360000         dc      c6g1
  325. Y:0051 3DDC03         dc      c6g2
  326.               
  327. X:0046                psect   hf_datax1
  328. X:0046        lowstate
  329. X:0046 000000         dc      0
  330. X:0047 000000         dc      0
  331. X:0048 000000         dc      0
  332. X:0049 000000         dc      0
  333. X:004A 000000         dc      0
  334. X:004B 000000         dc      0
  335.               
  336.               ;;;;;;;;;;;;;;;;;;;;;;;
  337.               ; miscellaneous signals
  338.               ;;;;;;;;;;;;;;;;;;;;;;;
  339.               
  340. X:0021                psect   hf_datax
  341. X:0021        L_overall
  342. X:0021 7FFFFF         dc      $7FFFFF
  343. X:0022        R_overall
  344. X:0022 7FFFFF         dc      $7FFFFF
  345.               
  346.               ;;;;;;;;;;;;;;;;;;;;;;;
  347.               ; signal vector
  348.               ;;;;;;;;;;;;;;;;;;;;;;;
  349. X:0023                psect   hf_datax
  350. X:0028                align 8
  351. X:0028        signal_vector
  352. X:0028 000000 Lin     dc      0.0
  353. X:0029 000000 Rin     dc      0.0
  354. X:002A        Reverb_L
  355. X:002A 000000         dc      0.0
  356. X:002B        Reverb_R        
  357. X:002B 000000         dc      0.0
  358.               
  359. X:002C        Lout
  360. X:002C 000000         dc      0
  361. X:002D        Rout
  362. X:002D 000000         dc      0
  363.               
  364. Y:0001                psect hf_datay
  365. Y:0001        signal_vectorp
  366. Y:0001 000028         dc      signal_vector
  367. Y:0002        signal_mod
  368. Y:0002 000003         dc      4-1
  369.               
  370. Y:0003        gain_vectorsp
  371. Y:0003 000052         dc      gain_vectors
  372.               ;;;;;;;;;;;;;;;;;;;;;;;
  373.               ; gain matrix
  374.               ;;;;;;;;;;;;;;;;;;;;;;;
  375. Y:0052                psect   hf_datay1
  376. Y:0052        gain_vectors
  377. Y:0052        Reverb_gain_vector
  378. Y:0052 400000 Reverb_Lin      dc 0.5
  379. Y:0053 400000 Reverb_Rin      dc 0.5
  380. Y:0054 000000 Reverb_Reverb_L dc 0.0
  381. Y:0055 000000 Reverb_Reverb_R dc 0.0
  382.               
  383. Y:0056        Lout_gain_vector
  384. Y:0056 000000 Lout_Lin        dc 0.0
  385. Y:0057 000000 Lout_Rin        dc 0.0
  386. Y:0058 7FFFFF Lout_Reverb_L   dc ONE
  387. Y:0059 000000 Lout_Reverb_R   dc 0.0
  388.               
  389. Y:005A        Rout_gain_vector
  390. Y:005A 000000 Rout_Lin        dc 0.0
  391. Y:005B 000000 Rout_Rin        dc 0.0
  392. Y:005C 000000 Rout_Reverb_L   dc 0.0
  393. Y:005D 800000 Rout_Reverb_R   dc -1.0
  394.               
  395.               ;***************************************************************
  396.               ;
  397.               ;       init code - call hf_init at first and any time when
  398.               ;       parameters change
  399.               ;
  400.               ;***************************************************************
  401. P:F000                psect   lo_code
  402.               
  403. P:F000        hf_init
  404.               ;
  405.               ;       clear out the filter delay lines
  406.               ;
  407.               
  408.               
  409.               
  410. P:F000 60F400         move            #c1d,r0
  411. P:F001 001000
  412. P:F002 05F420         movec           #c1m,m0
  413. P:F003 00065A
  414. P:F004 0BF080         jsr     clear_line_r0
  415. P:F005 00F033
  416.               
  417.               
  418. P:F006 60F400         move            #c2d,r0
  419. P:F007 001800
  420. P:F008 05F420         movec           #c2m,m0
  421. P:F009 00071E
  422. P:F00A 0BF080         jsr     clear_line_r0
  423. P:F00B 00F033
  424.               
  425.               
  426. P:F00C 60F400         move            #c3d,r0
  427. P:F00D 002000
  428. P:F00E 05F420         movec           #c3m,m0
  429. P:F00F 0007C2
  430. P:F010 0BF080         jsr     clear_line_r0
  431. P:F011 00F033
  432.               
  433.               
  434. P:F012 60F400         move            #c4d,r0
  435. P:F013 003000
  436. P:F014 05F420         movec           #c4m,m0
  437. P:F015 0008A4
  438. P:F016 0BF080         jsr     clear_line_r0
  439. P:F017 00F033
  440.               
  441.               
  442. P:F018 60F400         move            #c5d,r0
  443. P:F019 004000
  444. P:F01A 05F420         movec           #c5m,m0
  445. P:F01B 000924
  446. P:F01C 0BF080         jsr     clear_line_r0
  447. P:F01D 00F033
  448.               
  449.               
  450. P:F01E 60F400         move            #c6d,r0
  451. P:F01F 005000
  452. P:F020 05F420         movec           #c6m,m0
  453. P:F021 0009EA
  454. P:F022 0BF080         jsr     clear_line_r0
  455. P:F023 00F033
  456.               
  457.               
  458. P:F024 60F400         move            #a1d,r0
  459. P:F025 001700
  460. P:F026 05F420         movec           #a1m,m0
  461. P:F027 0000C0
  462. P:F028 0BF080         jsr     clear_line_r0
  463. P:F029 00F033
  464.               
  465.               
  466. P:F02A 60F400         move            #a2d,r0
  467. P:F02B 003900
  468. P:F02C 05F420         movec           #a2m,m0
  469. P:F02D 0000CE
  470. P:F02E 0BF080         jsr     clear_line_r0
  471. P:F02F 00F033
  472.               
  473. P:F030 0BF080         jsr     recalc_comb_gains
  474. P:F031 000006
  475. P:F032 00000C         rts
  476.               
  477. P:F033        clear_line_r0
  478. P:F033 200013         clr     a
  479. P:F034 0600A0         rep     #0
  480. P:F035 565800           move          a,x:(r0)+
  481. P:F036 00000C         rts
  482.               
  483.               ;***************************************************************
  484.               ;
  485.               ;       sample rate computations
  486.               ;
  487.               ;       Call hf_comp once per sample.
  488.               ;       Globals in_l and in_r should have the left and right
  489.               ;       input samples.  When hf_comp returns, out_l and out_r
  490.               ;       will be ready.
  491.               ;
  492.               ;***************************************************************
  493.               
  494.               ;
  495.               ; fs = 32.552083 kHz
  496.               ;
  497. P:0040                psect   hf_code
  498.               
  499. P:0040        hf_comp
  500.               ;
  501.               ;       copy inputs
  502.               ;
  503. P:0040 568200         move            x:<in_l,a
  504. P:0041 562800         move            a,x:<Lin
  505. P:0042 568300         move            x:<in_r,a
  506. P:0043 562900         move            a,x:<Rin
  507.               ;
  508.               ;       compute outputs using matrix multiply
  509.               ;
  510.               ; [reverb_in out_l out_r] = [gain_vector] * [signal_vector]
  511.               ;
  512. P:0044 688100         move            y:<signal_vectorp,r0
  513. P:0045 058260         movec           y:<signal_mod,m0
  514. P:0046 6C8300         move            y:<gain_vectorsp,r4
  515. P:0047 058024         movec           x:<ffff,m4
  516. P:0048 47A100         move            x:<L_overall,y1         ;and wait for m4
  517. P:0049 F09813         clr     a       x:(r0)+,x0 y:(r4)+,y0
  518. P:004A F098D2         mac     x0,y0,a x:(r0)+,x0 y:(r4)+,y0
  519. P:004B F098D2         mac     x0,y0,a x:(r0)+,x0 y:(r4)+,y0
  520. P:004C F098D2         mac     x0,y0,a x:(r0)+,x0 y:(r4)+,y0
  521. P:004D F098D3         macr    x0,y0,a x:(r0)+,x0 y:(r4)+,y0
  522. P:004E 21CF13         clr     a       a,b                     ;b is reverb_in
  523. P:004F F098D2         mac     x0,y0,a x:(r0)+,x0 y:(r4)+,y0
  524. P:0050 F098D2         mac     x0,y0,a x:(r0)+,x0 y:(r4)+,y0
  525. P:0051 F098D2         mac     x0,y0,a x:(r0)+,x0 y:(r4)+,y0
  526. P:0052 F098D3         macr    x0,y0,a x:(r0)+,x0 y:(r4)+,y0
  527. P:0053 21C513         clr     a       a,x1
  528. P:0054 47A2F0         mpy     x1,y1,a x:<R_overall,y1
  529. P:0055 560413         clr     a       a,x:<out_l
  530. P:0056 F098D2         mac     x0,y0,a x:(r0)+,x0 y:(r4)+,y0
  531. P:0057 F098D2         mac     x0,y0,a x:(r0)+,x0 y:(r4)+,y0
  532. P:0058 F098D2         mac     x0,y0,a x:(r0)+,x0 y:(r4)+,y0
  533. P:0059 F098D3         macr    x0,y0,a x:(r0)+,x0 y:(r4)+,y0
  534. P:005A 21C513         clr     a       a,x1
  535. P:005B 2000F0         mpy     x1,y1,a
  536. P:005C 560513         clr     a       a,x:<out_r
  537.               ;
  538.               ; r1    lowstate vector
  539.               ; m1    -1
  540.               ; r4    ptr to modulus,g1,g2 constants
  541.               ; m4    -1
  542.               ; r5    curaddr ptr
  543.               ; m5    -1
  544.               ; b     comb out accum
  545.               ; x0    scaled comb in
  546.               ;
  547.               ;
  548.               ;       set up reverb input
  549.               ;
  550. P:005D 21E41B         clr     b       b,x0                    ;get reverb_in
  551. P:005E 250800         move            #1.0/16,x1              ;allow 4 bits of headroom
  552. P:005F 2000A1         mpyr    x0,x1,a                         ;and 4 bits of noise
  553. P:0060 21C400         move            a,x0
  554. P:0061 61A000         move            x:<lowstatep,r1
  555. P:0062 058021         movec           x:<ffff,m1
  556. P:0063 649F00         move            x:<constsp,r4
  557. P:0064 0464A1         movec           m1,m4
  558. P:0065 6D8000         move                    y:<curaddrp,r5
  559. P:0066 0465A1         movec           m1,m5
  560.               ;
  561.               ;       do the six combs
  562.               ;
  563. P:0067 060680         do      #6,comb_loop
  564. P:0068 000072
  565. P:0069 60E500           move          x:(r5),r0               ;r0=curaddr
  566. P:006A 05DC60           movec         y:(r4)+,m0              ;m0=modulus
  567. P:006B F58100           move          x:(r1),x1 y:(r4)+,y1    ;x1=lowstate, y1=g1, wait for m0
  568. P:006C 46D800           move          x:(r0)+,y0              ;y0=delay out
  569. P:006D 20CE58           add   y0,b            y0,a            ;a=delay out
  570. P:006E 4FDCF3           macr  x1,y1,a         y:(r4)+,y1      ;a=out+g1*lowstate, y1=g2
  571. P:006F 181913           clr   a       a,x:(r1)+ a,y0          ;y0=new lowstate
  572. P:0070 605D40           add   x0,a    r0,x:(r5)+              ;a=in, save ptr
  573. P:0071 2000B3           macr  y0,y1,a                         ;a=in+g2*g1*lowstate
  574. P:0072 567800           move          a,x:-(r0)               ;store delay in (takes 2 cyc)
  575. P:0073        comb_loop
  576.               ;
  577.               ;       scale
  578.               ;
  579. P:0073 241519         rnd     b       #$15,x0         ;scale by ~1/6
  580. P:0074 21E600         move            b,y0
  581. P:0075 2000D9         mpyr    x0,y0,b
  582. P:0076 21E700         move            b,y1            ;save b for right chan
  583.               ;
  584.               ;       allpass L
  585.               ;
  586. P:0077 609900         move            x:<a1r,r0
  587. P:0078 059A20         movec           x:<a1md,m0
  588. P:0079 449B00         move            x:<a1g1d,x0
  589. P:007A 45E000         move            x:(r0),x1
  590. P:007B 20AEAB         macr    x0,x1,b x1,a
  591. P:007C 21E600         move                    b,y0
  592. P:007D 5758D7         macr    -x0,y0,a b,x:(r0)+
  593. P:007E 601932         asl     a       r0,x:<a1r
  594. P:007F 200032         asl     a                       ;get rid of the headroom
  595. P:0080 200032         asl     a
  596. P:0081 200032         asl     a
  597. P:0082 562A00         move            a,x:<Reverb_L
  598.               ;
  599.               ;       allpass R
  600.               ;
  601. P:0083 609C79         tfr     y1,b    x:<a2r,r0
  602. P:0084 059D20         movec           x:<a2md,m0
  603. P:0085 449E3E         neg     b       x:<a2g1d,x0
  604. P:0086 45E000         move            x:(r0),x1
  605. P:0087 20AEAB         macr    x0,x1,b x1,a
  606. P:0088 21E600         move                    b,y0
  607. P:0089 5758D7         macr    -x0,y0,a b,x:(r0)+
  608. P:008A 601C32         asl     a       r0,x:<a2r
  609. P:008B 200032         asl     a
  610. P:008C 200032         asl     a
  611. P:008D 200032         asl     a
  612. P:008E 562B00         move            a,x:<Reverb_R
  613.               ;
  614.               ;       done
  615.               ;
  616. P:008F 00000C         rts
  617.               
  618.                       end
  619.  
  620. Summary of psect usage
  621.  
  622.                  section seg base last top      used       avail    total
  623. -------------------------------------------------------------------------
  624.                  vectors  P  0000 0000 0040     0   0%     64 100%     64
  625.                  hf_code  P  0040 0090 0200    80  17%    368  82%    448
  626.                 hf_datax  X  0000 002E 0040    46  71%     18  28%     64
  627.                hf_datax1  X  0040 004C 0100    12   6%    180  93%    192
  628.                 hf_datay  Y  0000 0004 0040     4   6%     60  93%     64
  629.                hf_datay1  Y  0040 005E 0100    30  15%    162  84%    192
  630.                midi_data  X  0400 0427 1000    39   1%   3033  98%   3072
  631.                  lo_data  X  1000 59EA F000 18922  32%  38422  67%  57344
  632.                  lo_code  P  F000 F037 FE00    55   1%   3529  98%   3584
  633.                   loader  P  FE00 FE00 FFFF     0   0%    511 100%    511
  634.                      iox  X  FFC0 FFC0 FFFF     0   0%     63 100%     63
  635.                      ioy  Y  FFC0 FFC0 FFFF     0   0%     63 100%     63
  636.  
  637.  
  638. Symbol Table
  639. -------------------------------------
  640.             ffff 000000
  641.              one 000001
  642.              ONE 7FFFFF
  643.         lowstate 000046
  644.        lowstatep 000020
  645. lowpass_cutoff_slope 000401
  646. lowpass_cutoff_start 000400
  647.     gain_vectors 000052
  648.    gain_vectorsp 000003
  649.             in_r 000003
  650.             in_l 000002
  651.        comb_loop 000073
  652.           consts 000040
  653.          constsp 00001F
  654.        comblen_6 000421
  655.        comblen_5 00041B
  656.        comblen_4 000415
  657.        comblen_3 00040F
  658.        comblen_2 000409
  659.        comblen_1 000403
  660.           comb_g 000402
  661.        R_overall 000022
  662.          hf_comp 000040
  663.          hf_init 00F000
  664.    clear_line_r0 00F033
  665.        L_overall 000021
  666.          curaddr 000040
  667.         curaddrp 000000
  668.      recalc_loop 000018
  669. recalc_comb_gains 000006
  670.       signal_mod 000002
  671.   signal_vectorp 000001
  672.    signal_vector 000028
  673.            out_r 000005
  674.            out_l 000004
  675.    Lout_Reverb_R 000059
  676.    Lout_Reverb_L 000058
  677.         Lout_Rin 000057
  678.         Lout_Lin 000056
  679. Lout_gain_vector 000056
  680.             Lout 00002C
  681.              Lin 000028
  682.  Reverb_Reverb_R 000055
  683.  Reverb_Reverb_L 000054
  684.       Reverb_Rin 000053
  685.       Reverb_Lin 000052
  686. Reverb_gain_vector 000052
  687.         Reverb_R 00002B
  688.         Reverb_L 00002A
  689.              Rin 000029
  690.    Rout_Reverb_R 00005D
  691.    Rout_Reverb_L 00005C
  692.         Rout_Rin 00005B
  693.         Rout_Lin 00005A
  694. Rout_gain_vector 00005A
  695.             Rout 00002D
  696.            a1g1d 00001B
  697.             a1md 00001A
  698.              a1r 000019
  699.             c3g2 0.5420536000
  700.             c3g1 0.3515625000
  701.              c3m 0007C2
  702.              c3d 002000
  703.             a1g2 0.0000000000
  704.             a1g1 0.7000000000
  705.              a1m 0000C0
  706.              a1d 001700
  707.             c2g2 0.5616459000
  708.             c2g1 0.3281250000
  709.              c2m 00071E
  710.              c2d 001800
  711.             c1g2 0.5812382000
  712.             c1g1 0.3046875000
  713.              c1m 00065A
  714.              c1d 001000
  715.            a2g1d 00001E
  716.             a2md 00001D
  717.              a2r 00001C
  718.             a2g2 0.0000000000
  719.             a2g1 0.7500000000
  720.              a2m 0000CE
  721.              a2d 003900
  722.             c6g2 0.4832767000
  723.             c6g1 0.4218750000
  724.              c6m 0009EA
  725.              c6d 005000
  726.             c5g2 0.5028690000
  727.             c5g1 0.3984375000
  728.              c5m 000924
  729.              c5d 004000
  730.             c4g2 0.5224613000
  731.             c4g1 0.3750000000
  732.              c4m 0008A4
  733.              c4d 003000
  734. errors=0
  735.